package demo;

import java.util.List;

import javax.validation.constraints.NotBlank;

import org.hilo.boot.core.code.Desc;
import org.hilo.boot.core.code.FieldInfo;
import org.hilo.boot.core.code.ServiceCodeGenerator;
import org.junit.Before;
//import org.junit.Ignore;
import org.junit.Test;

/**
 * 标准API代码生成器 使用示例
 * 
 * 在项目中引入依赖：
   <dependency>
      <groupId>org.hilo.boot</groupId>
      <artifactId>hilo-api-generator</artifactId>
      <version>{打开Maven仓库查看最新版本}</version>
   </dependency>
 */
//@Ignore
public class BasicDataQueryServiceGenerator {
    ServiceCodeGenerator generator;
    // 配置好Service的名称，以及文件输出路径，然后以单元测试的方式运行
    @Before
    public void init() throws Exception {
        // packageName包名, serviceName类名（区分大小写，无须Service后缀）
        generator = new ServiceCodeGenerator("com.jwds.datadiscover.app.powerplant", "BasicDataQuery", "basic");
        generator.defaultAuthor("zollty");
        generator.defaultOutputDir("D:\\__SYNC2\\git\\hilo\\hilo-component\\hilo-api-generator\\src\\test\\java");
    }
    
    /**
     * 定义Service的一个方法：
     * 
     * name(定义方法名，方法说明)
     * params（定义字段信息）
     */
    @Test
    public void getSampleData() {
        //    name：方法（Method）名称，注释
        generator.name("getSampleData", "查询抽样数据，作为趋势图展示")
        .params(new FieldInfo() { // FieldInfo：字段（Field）定义
            
            @Desc("检测点位名称（对应OPC item）") // 字段的注释
            @NotBlank  // javax.validation 校验（可有可无）
            String itermName; // 字段的类型 和 名称
            
            @Desc("起始时间")
            @NotBlank
            String startTime;
            
            @Desc("结束时间")
            @NotBlank
            String endTime;
            
        })
        .results(Long.class, "timestamp", "时间戳") // 方法的返回值
        .results(String.class, "value", "点位值") // 可以有0~N个字段
        // 注意配置
        .build(false, false); // 第一个参数为true，则每个方法单独一个类，方便更新！
                              // 第二个参数为true，则文件生成好之后，自动打开生成的目录
    }
    
    // 定义Service的第二个方法，用法同上
    @Test
    public void getDetailData() {
        generator.name("getDetailData", "查询详细数据，作为表格展示")
        .params(new FieldInfo() {
            @Desc("检测点位名称（对应OPC item）") // 字段的注释
            @NotBlank  // javax.validation 校验（可有可无）
            String itermName; // 字段的类型 和 名称
            
            @Desc("起始时间")
            @NotBlank
            String startTime;
            
            @Desc("结束时间")
            @NotBlank
            String endTime;
            
            @Desc("分页查询的起始位置（不含）")
            String startPosition;
            
            @Desc("分页查询的限制条数（出于传输性能考虑，不超过3000）")
            @NotBlank
            int limit;
        })
        .results(List.class, "tv", "时间序列值") // 方法的返回值
        .results(String.class, "lastKey", "最后一条数据的id，作为分页时下一批数据的查询起点") // 可以有0~N个字段
        .build(true, false);
    }
    


}
